﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Ninject;
using PGE.AfastamentosTempMVC.Modelo;
using PGE.AfastamentosTempMVC.Repositorio.Interfaces;


namespace PGE.AfastamentosTempMVC.Repositorio.Implementacao
{
    public class AfastamentoRepositorio : IAfastamentoRepositorio
    {
        private IUnitOfWork _UntWork;

        [Inject]
        public AfastamentoRepositorio(IUnitOfWork UntWork)
        {
            _UntWork = UntWork;
        }

        #region IAfastamentoRepositorio Members

        public void Adicionar(Afastamento afastamento)
        {
            _UntWork.contexto.Afastamentos.Add(afastamento);
            _UntWork.Commit();
        }

        public void Editar(Afastamento afastamento)
        {
            _UntWork.contexto.Entry(afastamento).State = System.Data.EntityState.Modified;
            _UntWork.Commit();

        }

        public void Deletar(Afastamento afastamento)
        {
            _UntWork.contexto.Afastamentos.Remove(afastamento);
            _UntWork.Commit();
        }

        public void DeletarMuitos(Func<Afastamento, bool> where)
        {
            _UntWork.contexto.Afastamentos.Where(where).ToList().ForEach(Afastamento => _UntWork.contexto.Afastamentos.Remove(Afastamento));
            _UntWork.Commit();
        }

        public Afastamento ObterPorID(int Id)
        {
            return _UntWork.contexto.Afastamentos.Find(Id);
        }

        public Afastamento ObterPornome(Func<Afastamento, bool> where)
        {
            return _UntWork.contexto.Afastamentos.Where(where).FirstOrDefault();
        }

        public Afastamento ObterPrimeiro()
        {
            return _UntWork.contexto.Afastamentos.FirstOrDefault();
        }

        public Afastamento ObterPrimeiro(Func<Afastamento, bool> where)
        {
            return _UntWork.contexto.Afastamentos.Where(where).FirstOrDefault();
        }

        public IEnumerable<Afastamento> ListarTudo()
        {
            return _UntWork.contexto.Afastamentos.ToList();
        }

        public IQueryable<Afastamento> GetQueryable()
        {
            return _UntWork.contexto.Afastamentos;
        }

        public IEnumerable<Afastamento> ListarMuitos(Func<Afastamento, bool> where)
        {
            return _UntWork.contexto.Afastamentos.Where(where).ToList();
        }

        #endregion
    }
}
